%include	'Macros.inc'
cr	equ	0Dh			;������� �������
lf	equ	0Ah			;������� ������
	org	100h
Start:	jmp	Begin
;	������ ���������
Lname0	db	81 			;������������ ����� ����� �����
Lname	db	0			;����������� ����� ����� �����
Namefile times	81	db	0	;��� �����
Lognum	dw	0			;���������� ����� �����
Command	times	50	db	0	;bat �������
OneSymb	db	0
OutProg	db	0
Blocpar	times	14	db	0	;���� ����������
;-----------------------------------------------------------------------

;
;	������� ���� ���������
;	-----------------------------------------
;
Begin:
;������������ ������ ������
	mov	sp,Lprog		;SP <- ����� ���� �����
	mov	ah,4ah			;������� ��������� ������� ������
	mov	bx,(Lprog+0Fh)/16	;����� ������ ������� ������
	int	21h			;��������� ������� �������
	jnc	.M0			;������� ��� ���������� ������
	Out_str	MemAllocErr		;����� ��������� �� ������
	jmp	.Exit			;�����
;���� ������ ����� �����
.M0:	call	Clear_screen		;������� ������
	Out_str	QuestNameFile		;������ �� ����� �����
	mov	ah,0ah			;������� ����� ������
	mov	dx,Lname0		;DX <- �����-�������� ������ �����
	int	21h			;���� ������
	call	Send_crlf		;������� ������
	xor	bx,bx			;BX <- 0
	mov	bl,[Lname]		;BX <- ����� ����� �����
	cmp	bx,0			;���� ��� ����� �� �������
	je	.Exit			; �� �����
	mov	[Namefile+bx],byte 0	;������ �������� �����
;�������� �����
	mov	ah,3dh			;��������
	mov	dx,Namefile		; �����
	mov	al,0			; ��
	int	21h			; ������
	jnc	.M1			;���� �������
	Out_str	ErrorOpenFile		;��������� �� ������ �������� �����
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
;������ �� �����
.M1:    mov	[Lognum],ax		;���������� �����. ������ �����
	xor	si,si
.M2:	mov	ah,3fh			;������� ������ �� �����
	mov	bx,[Lognum]		;BX <- �����. ����� ��������� �����
	mov	cx,1			;CX <- ����� �������� ������
	mov	dx,OneSymb              ;DX <- �����-�������� ������
	int	21h			;������ �� ����� � �����
	jnc	.M3			;���� �������
	Out_str	ErrorReadFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M3:	cmp	ax,0			;��������� �� ����� �����
	je	.M4
	mov	dl,[OneSymb]		;�������� ������ � DX
	cmp	dl,0dh			;��������� �� ����� ������
	je	.M5
	mov	[Command+si],dl		;�������� ������ �� DX � ������ �������
	inc	si			;����������� SI �� 1
	jmp	.M2
.M4:	mov	[OutProg],byte 1
	jmp	.M6
;����������� ��������� �����, ���-�� ���������� ���� � �������� 0Ah
.M5:	mov	ah,42h			;������� ��������� ��������� �����
	mov	bx,[Lognum]		;BX <- �����. ����� �����
	mov	al,1			;AL <- 1 - ����������� ������������ �������� ���������
	xor	cx,cx			;�������� ����������� (������� �����)
	mov	dx,1		        ; � ������ (������� �����)
	int	21h			;������ �� ����� � �����
	jnc	.M6			;���� �������
	Out_str	ErrorReadFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
;���������� �������
.M6:	mov	[Command+si],byte 0h	;� ����� ������ �������� ������ 0
	mov	dx,Command              ;�������� ������� � DX
	mov	bx,Blocpar		;�������� ���� ���������� � BX
	mov	ax,4b00h		;���������
	int	21h			; �������
	jnc	.M7
	Out_str	ComExecError		;��������� �� ������ ���������� �������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
;��������� � �������	
.M7:	call	Send_crlf		;������� ������
	mov	[Command+si],byte '$'
	Out_str	Command
	call	Send_crlf		;������� ������
	Out_str	ComSucLaunched		;��������� �� ���������� ������� ������ bat ����� (���������)
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	xor	si,si
	cmp	[OutProg],byte 1	;��������� �� ����� �����
	je	.Exit			; � �������
	jmp	.M2                     ;��������� ����� ������ �� �����
;�����
.Exit:	mov	ax,4c00h
	int	21h			;������� � DOS
MemAllocErr	db	'Memory allocation error $'
QuestNameFile	db	'Enter file name: $'
ErrorOpenFile	db	'Error open file $'
ErrorReadFile	db	'Error read file $'
ComExecError	db	'Command execution error $'
ComSucLaunched	db      'Command success launched $'
;
;	������� ������ ������
;	---------------------
;
Send_crlf:
	push	ax
	push	dx
	mov	ah,2 		;������� ������
	mov	dl,cr		;��������� ������
	int	21h		;����� �������
	mov	dl,lf
	int	21h		; -"-
	pop	dx
	pop	ax
	ret
;
;	������� ������
;	--------------
;
Clear_screen:
	push	ax
	push	bx
	push	cx
	push	dx
	xor	al,al		;�������� ��� ����
	xor	cx,cx		;������� ����� ���� � (0,0)
	mov	dh,49		;������ ������ ������ - 49
	mov	dl,79		;������ ������� � 79 �������
	mov	bh,7		;��������� ���������� ��������
	mov	ah,6		;��������
	int	10h		; ����
	xor	dl,dl		;������� ����������
	xor	dh,dh		; �������
	xor	bx,bx		;������� �������������
	xor	al,al		;���������
	mov	ah,2		; �������
	int	10h		; � �������� �����
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
;
;	��������� ��� ������� � ����������
;	----------------------------------
; �����: AL - ��� ASCII ������� (0 - ����������� ������)
;	 AH - ����-��� �������
;
Read_byte:
	mov	ah,0		;���� �������
	int	16h		; ��� ���
	ret
;	����������� ������� �����
Stek	times	64	dw	0	;����� ������� �����
Lprog	equ	$-Start+100h		;����� ��������� (������� PSP)